// 二叉树的结构
const root = {
  value: 'a',
  left: {
    value: 'b',
    left: {
      value: 'd'
    },
    right: {
      value: 'e'
    }
  },
  right: {
    value: 'c',
    right: {
      value: 'f'
    }
  }
}

// 根据根节点的遍历顺序可分为 前序遍历 中序遍历 后序遍历

// 前序遍历
/**
 * 前序遍历顺序
 *    1. 根节点
 *    2. 左子树
 *    3. 右子树
 * 
 */
function preorder (root) {
  // 边界条件
  if(!root) {
    return
  }
  console.log('当前节点的遍历顺序是', root.value)
  // 递归遍历左子树
  preorder(root.left)
  // 递归遍历右子树
  preorder(root.right)
}


/**
 * 中序遍历顺序
 *    1. 左子树
 *    2. 根节点
 *    3. 右子树
 * 
 */
 function inorder (root) {
  // 边界条件
  if(!root) {
    return
  }
  
  // 递归遍历左子树
  inorder(root.left)
  console.log('当前节点的遍历顺序是', root.value)
  // 递归遍历右子树
  inorder(root.right)
}              



/**
 * 后序遍历顺序
 *    1. 左子树
 *    2. 右子树
 *    3. 根节点
 * 
 */
 function postorder (root) {
  // 边界条件
  if(!root) {
    return
  }
  
  // 递归遍历左子树
  postorder(root.left)
  
  // 递归遍历右子树
  postorder(root.right)

  console.log('当前节点的遍历顺序是', root.value)
}              


// preorder(root)
// inorder(root)
postorder(root)